package com.du.service.impl;

import com.du.domain.Item;
import com.du.enums.ExceptionEnum;
import com.du.exception.SsmException;
import com.du.mapper.ItemMapper;
import com.du.service.ItemService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * 商品模块Service实现类
 */
@Service
@Slf4j
public class ItemServiceImpl implements ItemService {
    @Autowired
    private ItemMapper mapper;

    //估计名称动态展示商品
    @Override
    public PageInfo<Item> selectItemsByLimit(String name,Integer page,Integer size) {
        //分页助手开启分页
        PageHelper.startPage(page,size);
        //构建查询条件
        Example example = new Example(Item.class);
        Example.Criteria criteria = example.createCriteria();
        if (!StringUtils.isEmpty(name)){
            //name不为空
            criteria.andLike("name", "%"+name+"%");
        }
        // 根据条件执行动态查询
        List<Item> items = mapper.selectByExample(example);

        //封装为pageInfo
        PageInfo<Item> pageInfo = new PageInfo<>(items);

        //返回
        return pageInfo;
    }

    //添加
    @Override
    public void addItem(Item item) {
        int count = mapper.insertSelective(item);
        if (count!=1){
            log.error("【添加商品】 添加商品失败！ item={}",item);
            throw new SsmException(ExceptionEnum.ITEM_ADD_FAILURE);
        }
    }

    //删除
    @Override
    public void deleteItem(Integer id) {
        int count = mapper.deleteByPrimaryKey(id);
        if (count!=1){
            log.error("【删除商品信息】 删除商品信息失败！ id={}",id);
            throw new SsmException(ExceptionEnum.ITEM_DELETE_FAILURE);
        }
    }

    //查询当前商品信息
    @Override
    public Item selectItemById(Integer id) {
        Item item = mapper.selectByPrimaryKey(id);
        if (item==null){
            log.error("【修改商品信息】 加载商品修改页面失败！ id={}",id);
            throw new SsmException(ExceptionEnum.ITEM_UPDATEPAGELOADDING_FAILURE);
        }
        return item;
    }

    //修改商品
    @Override
    public void updateItem(Item item) {
        int count = mapper.updateByPrimaryKeySelective(item);
        if (count!=1){
            log.error("【修改商品信息】 修改商品信息失败！ item={}",item);
            throw new SsmException(ExceptionEnum.ITEM_UPDATE_FAILURE);
        }
    }


}
